package com.cskaoyan.javase.method._0introduction;

/**
 * 全新的版本,使用方法来复用代码,优化实现
 * 一般情况下，定义一个方法是以下语法结构：
 * [修饰符列表] 返回值类型 方法名 (形式参数列表){
 *   // 方法体
 * }
 *
 * 首先定义一个方法,需要明确方法实现的功能,定义方法的需求
 * 这里的需求是: 求两个int类型数据的和
 *
 * 在什么位置定义方法呢?
 * 肯定是在类体中,而且方法的定义是不能嵌套的
 * 所以必须在类体中找到空白的位置,来定义一个方法
 *
 * 接下来根据语法,来具体定义方法,语法当中的每个结构:
 * 1.修饰符列表,修饰符会在面向对象中再详细学习,今天我们先默认方法的修饰符列表是 public static
 * 而且需要注意的是修饰符列表完全可以为空,可以省略
 *
 * 2.返回值类型,指的是返回值的数据类型,可以是基本数据类型,也可以是引用数据类型
 *      返回值: 指的是方法经过一系列代码执行得出的结果
 *      返回值是方法返回给方法外界使用的
 *      一个方法只可能有一个返回值,不可能有多个返回值
 *
 * 3.方法名,首先遵循小驼峰的命名规范
 *      其次尽量使用合法的英文单词
 *      尽量做到"见名知意"
 *      方法的名字要体现出方法的功能和用途,不要乱起名字
 *      方法名尽量带动词,因为它表示操作
 *      比如求最大值:
 *      getMaxValue
 *
 * 4.(形式参数列表),指的是由形式参数组成的列表
 *      调用一个方法时,如何明确方法需要的数据呢?
 *      比如是什么数据类型的,需要几个等.
 *      这就需要依靠形式参数列表完成
 *      形式参数: 它并不是一个真正的参数,而是用来告诉方法的调用者,这个方法究竟需要传入什么数据类型的数据
 *      而且由于数据传入方法后,需要在方法当中使用
 *      所以形式参数(形参),它的语法是:
 *          数据类型 形参名;
 *      形参列表可以是1个,2个也可以是多个,也可以是空着没有.
 *      形参列表是空的方法,称之为"无参方法"
 *      形参列表不为空的方法,称之为"有参方法"
 *
 * 5.方法体,指的是方法实现功能的一系列语句,可以空着,也可以随便写一些语句.
 *
 * 方法定义时的细节问题:
 *      1.如果方法的返回值类型,明确指出方法需要返回一个xxx类型的数据,那么在方法体中就必须明确用:
 *      "return + 返回值"
 *      的语法,来指出方法的返回值
 *
 *      2.在定义方法时,方法中的局部位置有几个?
 *          a.方法体大括号内部,是属于方法的局部位置
 *          b.形参列表的位置,形参列表中的形参全部都是方法的局部变量
 *
 * 方法的调用,复用代码,实现功能:
 *      1.在任何Java程序中,main方法是始终的入口方法,这意味着任何java代码要想被执行
 *          要么直接写在main方法当中
 *          要么间接被main方法调用执行
 *          也就是说,在main方法中直接/间接调用某个方法,该方法的代码才会执行.
 *
 *      2.如何在main方法中调用其他方法呢?
 *          在main方法中,调用同类中,修饰符列表中存在static关键字的方法
 *          调用方式是: 直接方法名调用
 *          比如 sum();
 *      3.方法的形参列表如果明确指出方法需要参数传入,那么在调用时,就必须填入相应类型,数量的参数
 *          称之为"实际参数"(实参)
 *      4.方法调用时,如果方法明确有返回值,那么建议处理这个返回值.
 *      5.(重点)操作方法的调用,比如"sum(1, 1)",实际上操作方法的返回值
 *
 * 注意事项:
 *      1.方法的定义位置是不影响方法调用的,一个类中的多个方法是平行关系.
 *      2.同一个类中,修饰符列表中有static的方法,可以直接方法名互相调用.
 *
 * @since 16:00
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class NewDemo {

    public static void main(String[] args) {
        // Result of 'NewDemo.sum()' is ignored
        int result1 = sum(1, 1);
        System.out.println(sum(10, 10));
        System.out.println(sum(20, 30) + 40);
        System.out.println(sum(20, 30) - 40);

        String str = test();
        System.out.println(test());
        System.out.println(test() + ", 但是你不是!");
        System.out.println(test().length());

        System.out.println(test2());
    }

    // 需求: 求两个int类型数据的和
    public static int sum(int num1, int num2) {
        // Missing return statement
        // Local variable 'sumValue' is redundant
        // int sumValue = num1 + num2;
        // return sumValue;
        return num1 + num2;
    }

    public static String test() {
        return "我是一个大帅哥!";
    }

    public static double test2(){
        System.out.println(test());
        return 10000000;
    }

}
